import axios from "axios";
import Vue from 'vue'

// axios的公共配置
axios.defaults.baseURL = 'http://127.0.0.1:3000';
// axios.defaults.baseURL = 'http://127.0.0.1:4000';
// axios.defaults.baseURL = 'http://192.168.1.102:4000';
// axios.defaults.timeout = 3000;

let count = 0
// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    count++
    // 在发送请求之前做些什么
    // 请求数据时显示菊花
    Vue.showLoading()
    return config;
}, function (error) {
    // 对请求错误做些什么
    // 有错误的时候隐藏菊花
    Vue.hiddenLoading()
    return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    count--
    // 对响应数据做点什么
    // 当请求的数据等于响应的数据才将菊花隐藏
    if (count === 0) {
        Vue.hiddenLoading()
    }
    return response;
}, function (error) {
    // 对响应错误做点什么
    Vue.hiddenLoading()
    return Promise.reject(error);
});

// export function request(config, success, failure) {
//     return new Promise((resolve, reject) => {
//         // 创建axios实例
//         const instance = axios.create({
//             baseURL = 'http://192.168.1.103:3000',
//             timeout = 3000,
//         })

//         // 发生真正的网络 请求
//         instance(config)
//             .then(res => {
//                 // console.log(res);
//                 success(res);
//             })
//             .catch(err => {
//                 // console.log(err);
//                 failure(err)
//             })
//     })
// }


// 封装自己的get/post方法
export default {
    get: function (path = '', data = {}) {
        return new Promise((resolve, reject) => {
            axios.get(path, {
                params: data
            })
                .then(function (response) {
                    resolve(response.data);
                })
                .catch(function (error) {
                    reject(error);
                })
        })
    },
    post: function (path = '', data = {}) {
        return new Promise((resolve, reject) => {
            axios.post(path, data)
                .then(function (response) {
                    resolve(response.data);
                })
                .catch(function (error) {
                    reject(error);
                })

        })
    },
    // axios发送并发请求
    // axios.all([])返回的结果是一个数组，使用axios.spread可将数组[res1,res2]展开为res1，res2
    all: function (list) {
        return new Promise(function (resolve, reject) {
            axios.all(list)
                // ...为分解其内容
                .then(axios.spread(function (...result) {
                    resolve(result)
                }))
                .catch(function (err) {
                    reject(err)
                })
        })
    }
}
